package in.rob.client.page.base;
import in.lib.Constants;
import in.lib.adapter.PostAdapter;
import in.lib.event.DeletePostEvent;
import in.lib.event.NewPostEvent;
import in.lib.event.StarPostEvent;
import in.lib.event.UnStarPostEvent;
import in.lib.manager.SettingsManager;
import in.model.Post;
import in.model.SimpleUser;
import in.model.base.NetObject;
import in.rob.client.R;
import in.rob.client.ThreadActivity;
import java.util.ArrayList;
import java.util.List;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import com.squareup.otto.Subscribe;
public abstract class PostStreamFragment extends StreamFragment
{
@Override public void onDataReady()
{
}
@Override public void retrieveArguments(Bundle arguments)
{
}
@Override public void setupAdapters()
{
if (getAdapter() == null)
{
setAdapter(new PostAdapter(getContext(), new ArrayList<Post>()));
}
else
{
setAdapter(getAdapter());
}
}
@Override public void onRefresh()
{
((PostAdapter)getAdapter()).setLastPositionAnimated(5);
super.onRefresh();
}
/**
* Loops through posts and builds a list of users and tags to use in auto suggest
*/
public void extractUsersAndTags(List<NetObject> items)
{
List<SimpleUser> users = getCacheManager().readFileAsObject(Constants.CACHE_USERNAMES, new ArrayList<SimpleUser>());
List<NetObject> tags = getCacheManager().readFileAsObject(Constants.CACHE_HASHTAGS, new ArrayList<NetObject>());
List<String> tagsStr = getCacheManager().readFileAsObject(Constants.CACHE_HASHTAGS_STR, new ArrayList<String>());
if (items != null)
{
for (NetObject o : items)
{
Post p = (Post)o;
SimpleUser user = SimpleUser.parseFromUser(p.getPoster());
if (!SimpleUser.containsUser(users, user))
{
users.add(user);
}
if (p.getHashTags() != null)
{
for (String s : p.getHashTags())
{
if (!tagsStr.contains("#" + s))
{
NetObject tag = new NetObject();
tag.setFilterTag("#" + s);
tags.add(tag);
tagsStr.add("#" + s);
}
}
}
}
}
getCacheManager().asyncWriteFile(Constants.CACHE_USERNAMES, users);
getCacheManager().asyncWriteFile(Constants.CACHE_HASHTAGS, tags);
getCacheManager().asyncWriteFile(Constants.CACHE_HASHTAGS_STR, tagsStr);
}
@Override public void onItemClick(AdapterView<?> arg0, View v, int position, long arg3)
{
if (!SettingsManager.isInvertPostClick() || (SettingsManager.isInvertPostClick() && v.getTag(R.id.TAG_STOP_STACK_OVERFLOW) != null))
{
v.setTag(R.id.TAG_STOP_STACK_OVERFLOW, null);
Post post = (Post)getAdapter().getItem(position - getHeadedListView().getHeaderViewsCount());
Intent postDetails = new Intent(getContext(), ThreadActivity.class);
postDetails.putExtra(Constants.EXTRA_POST, post);
startActivity(postDetails);
}
else
{
v.setTag(R.id.TAG_STOP_STACK_OVERFLOW, true);
getAdapter().onItemLongClick(arg0, v, position, arg3);
}
}
/**************************************************
*
* OTTO EVENTS
*
**************************************************/
/**
* Called when a post is recieved from a broadcast.
*
* Override this to change the default behavour.
* Default: prepend adapter with post
*
* @param p The post recieved
*/
@Subscribe public void onPostRecieved(NewPostEvent event)
{
final Post p = event.getPost();
if (p != null && getAdapter() != null)
{
if (isReady())
{
getHeadedListView().setBlockLayoutChildren(true);
Post replyee = (Post)getAdapter().getItemById(p.getReplyTo());
if (replyee != null)
{
replyee.setHasReplies(true);
replyee.setReplyCount(replyee.getReplyCount() + 1);
}
int[] pos = getLastViewPosition(null);
prependItem(p);
registerPositionReset(pos[0] + 1, pos[1]);
refreshAdapter();
}
else
{
prependItem(p);
}
}
}
/**
* Called when a post is deleted from a broadcast.
*
* Override this to change the default behavour.
* Default: delete post from adapter
*
* @param p The post deleted
*/
@Subscribe public void onPostDeleted(DeletePostEvent event)
{
Post p = event.getPost();
if (p != null && getAdapter() != null)
{
deleteItem(p);
}
}
/**
* Called when a post is starred
*
* Override this to change the default behavour.
*
* @param p The post starred
*/
@Subscribe public void onPostStarred(StarPostEvent event){}
/**
* Called when a post is unstarred
*
* Override this to change the default behavour.
*
* @param p The post unstarred
*/
@Subscribe public void onPostUnStarred(UnStarPostEvent event){}
}